/*
 * SimpleSecondaryIndex.h
 *
 *      Author: carlos
 */

#ifndef SIMPLESECONDARYINDEX_H_
#define SIMPLESECONDARYINDEX_H_

/**

 *
 * Relaciona 1 id principal con muchos id's
 */
#include <vector>
#include "../../utils/types.h"
#include "../IEntidad.h"
class SimpleSecondaryIndex: public IEntidad {
friend class EntityFactory;
private:
	vector<ID> id_relacionales;
protected:
	SimpleSecondaryIndex();

public:
	/**
	 * Busca entre los id Relacionales
	 */
	ID findID(ID);//Arroja ObjectNotFound
	void agregarIdOrdenado(ID idRelacional);
	void removerIdRelacional(ID idRelacional);
	vector<ID> getId_relacionales() const {
		return id_relacionales;
	}

	void setId_relacionales(vector<ID> id_relacionales) {
		this->id_relacionales = id_relacionales;
	}

	virtual ~SimpleSecondaryIndex();

	bool operator==(const SimpleSecondaryIndex& k) { // sobrecarga operador ==
		return this->id == k.id;
	}
	bool operator>(const SimpleSecondaryIndex& k) { // sobrecarga operador >
		return this->id > k.id;
	}
	bool operator<(const SimpleSecondaryIndex& k) { // sobrecarga operador <
		return this->id < k.id;
	}

	virtual string toString();
	virtual std::string serialize();
	virtual void unserialize(std::string &buffer);
	virtual int getDataSize();
};

#endif /* SIMPLESECONDARYINDEX_H_ */
